package com.zc.medium.No2;

/**
 * @program: leetCode_Exercise
 * @author: zhangcong
 * @create: 2019-09-11 12:41
 * @description: 两数相加
 * 给出两个 非空 的链表用来表示两个非负的整数。其中，它们各自的位数是按照 逆序 的方式存储的，并且它们的每个节点只能存储 一位 数字。
 * 如果，我们将这两个数相加起来，则会返回一个新的链表来表示它们的和。
 * 您可以假设除了数字 0 之外，这两个数都不会以 0 开头。
 * 示例：
 * <p>
 * 输入：(2 -> 4 -> 3) + (5 -> 6 -> 4)
 * 输出：7 -> 0 -> 8
 * 原因：342 + 465 = 807
 **/
public class Solution {
    public static class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
        }

        public void setNext(ListNode next) {
            this.next = next;
        }
    }

    /**
     * @param l1
     * @param l2
     * @return
     */
    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int temp = l1.val + l2.val;
        l1.val = temp % 10;
        int divisor = temp / 10;
        if (divisor > 0) {
            if (null != l1.next) {
                l1.next.val += divisor;
            } else {
                l1.next = new ListNode(divisor);
            }
        }

        if (l1.next == null && l2.next != null) {
            l1.next = new ListNode(0);
        }

        if (l1.next != null && l2.next == null) {
            l2.next = new ListNode(0);
        }

        if (l1.next != null && l2.next != null) {
            addTwoNumbers(l1.next, l2.next);
        }
        return l1;
    }

    private static void test(ListNode listNode,int i){
        listNode.next=new ListNode(i);
    }

    public static void main(String[] args) {
        int[] a = {9, 9, 9, 9};
        ListNode listNode1 = new ListNode(a[0]);
        ListNode temp=listNode1;
        for (int i = 1; i < a.length; i++) {
            test(temp,a[i]);
            temp=temp.next;
        }

        int[] b = {9};
        ListNode listNode2 = new ListNode(b[0]);
        ListNode temp2=listNode2;
        for (int i = 1; i < b.length; i++) {
            test(temp2,a[i]);
            temp2=temp2.next;
        }
        ListNode twoNumbers = addTwoNumbers(listNode1, listNode2);
        while (twoNumbers!=null){
            System.out.print(twoNumbers.val+"--->");
            twoNumbers=twoNumbers.next;
        }
    }
}
